/* 日志全局接口和宏
*   提供获取指定日志器的全局接口
*   使用宏函数对日志器的接口进行代理(代理模式)
*   提供一个可以直接使用宏函数通过默认日志器将日志输出到标准输出的接口
*/

#ifndef _MYLOG_H
#define _MYLOG_H

#include "logger.hpp"
#include <cstdio>

namespace Log
{
    //获取指定日志器
    Logger::ptr getLogger(const std::string& name) { return LoggerManager::getInstance().getLogger(name); }

    //获取默认日志器
    Logger::ptr getRootLogger() { return LoggerManager::getInstance().getRootLogger(); }
    
    //添加日志器
    void addLogger(Log::Logger::ptr logger) { LoggerManager::getInstance().addLogger(logger); }

    //日志输出宏
    #define DEBUGLOG(fmt,...)  debug(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define INFOLOG(fmt,...)   info(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define WARNLOG(fmt,...)   warn(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define ERRORLOG(fmt,...)  error(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    #define FATALLOG(fmt,...)  fatal(__FILE__,__LINE__,fmt,##__VA_ARGS__)
    //默认日志器输出
    #define DEFDEBUG(fmt,...)  Log::getRootLogger()->DEBUGLOG(fmt,##__VA_ARGS__)
    #define DEFINFO(fmt,...)   Log::getRootLogger()->INFOLOG(fmt,##__VA_ARGS__)
    #define DEFWARN(fmt,...)   Log::getRootLogger()->WARNLOG(fmt,##__VA_ARGS__)
    #define DEFERROR(fmt,...)  Log::getRootLogger()->ERRORLOG(fmt,##__VA_ARGS__)
    #define DEFFATAL(fmt,...)  Log::getRootLogger()->FATALLOG(fmt,##__VA_ARGS__)
}

#endif

